\section{\href{https://www.apiref.com/cpp-zh/cpp/header/type_traits.html}{std::type\_traits}}
\subsection{辅助类}
\begin{itemize}
\item \href{https://www.apiref.com/cpp-zh/cpp/types/integral_constant.html}{integral\_constant}:具有指定值的指定类型的编译期常量。
\cppfile{sample/type_traits/type_traits_integral_constant_demo.cc}
\end{itemize}
\subsection{基础类型分类}
\begin{itemize}
\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_void.html}{is\_void(C++11)}：检查模板参数是否为 void 。
\cppfile{sample/type_traits/type_traits_is_void_demo.cc}
\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_null_pointer.html}{is\_null\_pointer(C++14)}：检查类型是否为 \href{https://www.apiref.com/cpp-zh/cpp/types/nullptr_t.html}{std::nullptr\_t}
\cppfile{sample/type_traits/type_traits_is_null_pointer_demo.cc}
\end{itemize}
\begin{remark}
对于 \href{https://www.apiref.com/cpp-zh/cpp/types/nullptr_t.html}{std::nullptr\_t} ， \href{https://www.apiref.com/cpp-zh/cpp/types/is_pointer.html}{std::is\_pointer} 为 false ，因为它不是内建指针类型。
\end{remark}
\begin{itemize}
\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_integral.html}{std::is\_integral} 检查模板参数是否为整型常量。
\cppfile{sample/type_traits/type_traits_is_integral_demo.cc}
\item is\_floating\_point 检查类型是否是浮点类型。
\item is\_array 检查类型是否是数组类型。
\item is\_enum(C++11) 检查类型是否是枚举类型。
\item is\_union(C++11) 检查类型是否为联合体类型。
\item is\_class(C++11) 检查类型是否非联合类类型。
\item is\_function(C++11) 检查是否为函数类型。
\cppfile{sample/type_traits/type_traits_is_basic_demo.cc}
\item is\_pointer(C++11) 检查类型是否为指针类型(类模板)。
\cppfile{sample/type_traits/type_traits_is_pointer_demo.cc}
\item is\_lvalue\_reference(C++11)检查类型是否为左值引用(类模板)。
\item is\_rvalue\_reference(C++11)检查类型是否为右值引用(类模板)。
\cppfile{sample/type_traits/type_traits_is_reference_demo.cc}
\item is\_member\_object\_pointer(C++11)检查类型是否为指向非静态成员对象的指针(类模板)。
\item is\_member\_function\_pointer(C++11) 检查类型是否为指向非静态成员函数的指针(类模板)。
\cppfile{sample/type_traits/type_traits_is_member_demo.cc}
\end{itemize}
\subsection{复合类型分类}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_fundamental.html}{is\_fundamental}(C++11)：检查是否是基础类型(类模板)。若 T 为\href{https://www.apiref.com/cpp-zh/cpp/language/types.html}{基础类型}（即算术类型、 void 或 nullptr\_t ），则提供等于 true 的成员常量 value 。对于任何其他类型， value 为 false 。添加 is\_fundamental 或 is\_fundamental\_v (C++17 起) 的特化的程序行为未定义。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_arithmetic.html}{is\_arithmetic}(C++11)：检查类型是否为算术类型\footnote{即整数类型或浮点类型或其 cv 限定版本}(类模板)。
        \cppfile{sample/type_traits/is_arithmetic_demo.cc}
    \item \href{https://www.apiref.com/cpp-zh/cpp/types/is_scalar.html}{is\_scalar}(C++11)：检查类型是否为标量类型\footnote{即可有 cv 限定的算术、指针、指向成员指针、枚举或 std::nullptr\_t 类型}(类模板)。
        \cppfile{sample/type_traits/is_scalar_demo.cc}
    \item \href{https://www.apiref.com/cpp-zh/cpp/types/is_object.html}{is\_object}(C++11)：检查是否是对象类型\footnote{即任何函数、引用或 void 类型外的可有 cv 限定的类型}(类模板)。
        \cppfile{sample/type_traits/is_object_demo.cc}
    \item \href{https://www.apiref.com/cpp-zh/cpp/types/is_compound.html}{is\_compound}(C++11)：检查是否为复合类型\footnote{即数组、函数、对象指针、函数指针、成员对象指针、成员函数指针、引用、类、联合体或枚举，含任何 cv 限定变体）}(类模板)。
        \cppfile{sample/type_traits/is_compound_demo.cc}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_reference.html}{is\_reference}(C++11)：检查类型是否为左值引用或右值引用(类模板)。
        \cppfile{sample/type_traits/is_reference_demo.cc}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_member_pointer.html}{is\_member\_pointer}(C++11)：检查类型是否为指向非静态成员函数或对象的指针类型(类模板)。
        \cppfile{sample/type_traits/is_member_pointer_demo.cc}
\end{itemize}
\subsection{类型的性质}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_const.html}{is\_const}(C++11)：检查类型是否为 const 限定(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_volatile.html}{is\_volatile}(C++11)：检查类型是否被 volatile\footnote{ volatile 或 const volatile} 限定(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_trivial.html}{is\_trivial}(C++11)：检查类型是否平凡\footnote{即标量类型、有平凡默认构造函数的可平凡复制类，或这些类/类型的数组，可有 cv 限定}(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_trivially_copyable.html}{is\_trivially\_copyable}(C++11)：检查类型是否可平凡复制(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_standard_layout.html}{is\_standard\_layout}(C++11)：检查是否是一个标准布局类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_pod.html}{is\_pod(C++11)}(C++20 中弃用)：检查类型是否为简旧数据（POD）类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/has_unique_object_representations.html}{has\_unique\_object\_4}(C++17)：检查是否该类型对象的每一位都对其值有贡献(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_empty.html}{is\_empty}(C++11)：检查类型是否为类（但非联合体）类型且无非静态数据成员(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_polymorphic.html}{is\_polymorphic}(C++11)：检查类型是否为多态类类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_abstract.html}{is\_abstract}(C++11)：检查类型是否为抽象类类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_final.html}{is\_final}(C++14)：检查类型是否为 final 类类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_aggregate.html}{is\_aggregate}(C++17)：检查类型是否聚合类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_signed.html}{is\_signed}(C++11)：检查类型是否为有符号算术类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_unsigned.html}{is\_unsigned}(C++11)：检查类型是否为无符号算术类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_bounded_array.html}{is\_bounded\_array}(C++20)：检查类型是否为有已知边界的数组类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_unbounded_array.html}{is\_unbounded\_array}(C++20)：检查类型是否为有未知边界的数组类型(类模板)。
\end{itemize}
\subsection{受支持操作}
\begin{itemize}
\item is\_constructible、is\_trivially\_constructible、is\_nothrow\_constructible(C++11)：检查类型是否带有针对特定实参的构造函数(类模板)。
\item is\_default\_constructible、is\_trivially\_default\_constructible、is\_nothrow\_default\_constructible：检查类型是否有默认构造函数(类模板)。
\item is\_copy\_constructible、is\_trivially\_copy\_constructible、is\_nothrow\_copy\_constructible：检查类型是否拥有复制构造函数(类模板)。
\item is\_move\_constructible、is\_trivially\_move\_constructible、is\_nothrow\_move\_constructible：检查类型是否能从右值引用构造(类模板)。
\item is\_assignable、is\_trivially\_assignable、is\_nothrow\_assignable： 检查类型是否拥有针对特定实参的赋值运算符(类模板)。
\item is\_copy\_assignable、is\_trivially\_copy\_assignable、is\_nothrow\_copy\_assignable：检查类型是否拥有复制赋值运算符(类模板)。
\item is\_move\_assignable、is\_trivially\_move\_assignable、is\_nothrow\_move\_assignable(C++11)：检查类型是否有拥有移动赋值运算符(类模板)。
\item is\_destructible、is\_trivially\_destructible、is\_nothrow\_destructible(C++11)：检查类型是否拥有未被弃置的析构函数(类模板)。
\item has\_virtual\_destructor(C++11)：检查类型是否拥有虚析构函数(类模板)。
\item is\_swappable\_with、is\_swappable、is\_nothrow\_swappable\_with、is\_nothrow\_swappable(C++17)：检查一个类型的对象是否能与同类型或不同类型的对象交换(类模板)。
\end{itemize}
\subsection{性质查询}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/alignment_of.html}{alignment\_of}(C++11)：获取类型的对齐要求(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/rank.html}{rank}(C++11)：获取数组类型的维数(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/extent.html}{extent}(C++11)：获取数组类型在指定维度的大小(类模板)。
\end{itemize}
\subsection{类型关系}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_same.html}{is\_same}(C++11)：检查两个类型是否相同(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_base_of.html}{is\_base\_of}(C++11)：检查一个类型是否派生自另一个类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_convertible.html}{is\_convertible}（C++11）、is\_nothrow\_convertible（C++20）：检查是否能转换一个类型为另一类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_layout_compatible.html}{is\_layout\_compatible}(C++20)：检查二个类型是否布局兼容(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_pointer_interconvertible_base_of.html}{is\_pointer\_interconvertible\_base\_of}(C++20)：检查一个类型是否为另一类型的指针可互转换（起始）基类(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/is_invocable.html}{is\_invocable、is\_invocable\_r、is\_nothrow\_invocable、is\_nothrow\_invocable\_r}(C++17)：检查类型能否以给定的实参类型调用（如同以 std::invoke）(类模板)。
\end{itemize}
\subsection{常-易变性说明符}
\begin{itemize}
\item	\href{https://www.apiref.com/cpp-zh/cpp/types/remove_cv.html}{remove\_cv、remove\_const、remove\_volatile}(C++11)：从给定类型移除 const 或/与 volatile 限定符(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/add_cv.html}{add\_cv、add\_const、add\_volatile}(C++11)：添加 const 或/与 volatile 限定符到给定类型(类模板)。
\end{itemize}
\subsection{引用}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/remove_reference.html}{remove\_reference}(C++11)：从给定类型移除引用(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/add_reference.html}{add\_lvalue\_reference、add\_rvalue\_reference}(C++11)：向给定类型添加左值或右值引用(类模板)。
\end{itemize}
\subsection{指针}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/remove_pointer.html}{remove\_pointer}(C++11):移除给定类型的一层指针(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/add_pointer.html}{add\_pointer}(C++11)：对给定类型添加一层指针(类模板)。
\end{itemize}
\subsection{符号修饰符}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/make_signed.html}{make\_signed}(C++11)：使给定的整型类型有符号(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/make_unsigned.html}{make\_unsigned}(C++11)：使给定的整型类型无符号(类模板)。
\end{itemize}
\subsection{数组}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/remove_extent.html}{remove\_extent}(C++11)：从给定数组类型移除一个维度(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/remove_all_extents.html}{remove\_all\_extents}(C++11)：移除给定数组类型的所有维度(类模板)。
\end{itemize}
\subsection{杂项变换}
\begin{itemize}
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/aligned_storage.html}{aligned\_storage}(C++11)：定义适于用作给定大小的类型的未初始化存储的类型(类模板)。
	\item \href{https://www.apiref.com/cpp-zh/cpp/types/aligned_union.html}{aligned\_union}(C++11)：定义适于用作所有给定类型的未初始化存储的类型(类模板)。
\end{itemize}
